package com.zhiwei.codesecurity.common.base;

import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface BasePageDao<T> extends BaseDao {

    /**
     * 批量新增
     * @param list
     * @return
     */
    Integer addBatch(List<T> list);

    /**
     * 批量更新
     * @param list
     * @return
     */
    Integer updateBatch(List<T> list);

    /**
     * 批量更新
     * @param list
     * @return
     */
    Integer updateBatchWithEmpty(List<T> list);

    /**
     * 批量删除
     * @param objects
     * @return
     */
    Integer deleteBatch(Object[] objects);

    /**
     * 新增
     * @param t
     * @return
     */
    int add(T t);

    /**
     * 根据id更新
     * @param t
     * @return
     */
    int update(T t);

    /**
     * 根据id更新，不忽略空字符串
     * @param t
     * @return
     */
    int updateWithEmpty(T t);

    /**
     * 带条件更新， 空字符串不更新
     * @param oldObj
     * @param newObj
     * @return
     */
    int updateWithCondIgNull(@Param("oldObj") T oldObj, @Param("newObj") T newObj);

    /**
     * 带条件更新， 空字符串也更新
     * @param oldObj
     * @param newObj
     * @return
     */
    int updateWithCond(@Param("oldObj") T oldObj, @Param("newObj") T newObj);

    /**
     * 根据主键删除对象
     * @param id
     * @return
     */
    int deleteByPrimaryKey(Object id);

    /**
     * 根据主键获取对象
     * @param id
     * @return
     */
    T getByPrimaryKey(Object id);

    /**
     * 条件查询
     * @param t
     * @return
     */
    List<T> list(T t);

    /**
     * 条件查询
     * @param t
     * @return
     */
    T query(T t);

    /**
     * 条件查询数量
     * @param t
     * @return
     */
    Integer count(T t);

}
